package com.zrrd.spring_02;


import com.zrrd.spring_02.service.TeaService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
    public static void main(String[] args) {
        //这里要使用ClassPathXmlApplicationContext类，不能使用ApplicationContext接口
        //因为ApplicationContext接口没有close方法。
        ClassPathXmlApplicationContext context =
                new ClassPathXmlApplicationContext("applicationContext.xml");

        //注册关闭钩子函数，当程序从虚拟机退出之前会调用这个函数，再关闭容器
        //这行代码可以防止创建ClassPathXmlApplicationContext对象后，和执行context.close()前的任意位置
        context.registerShutdownHook();


        //TeaDao teaDao =(TeaDao) context.getBean("teaDao");
        System.out.println("---------------------teaDao初始化后----teaDaoMethod执行前-------------------------");
        //teaDao.teaDaoMethod();

        System.out.println("-------------------中间分隔线------------------------------------");
        //getBean("teaService") 根据bean在IOC容器中的id或name来获取
        //TeaService teaService=(TeaService) context.getBean("teaService");
        //getBean(TeaService.class) 根据bean在的类型进行获取
        //如果IOC容器中同时存在多个相同类型的Bean实例，获取Bean的时候如果是根据类型获取，则会抛异常
        //TeaService teaService= context.getBean(TeaService.class);
        //可以采取id/name + Type类型的方式 ----推荐使用
        TeaService teaService= context.getBean("ts4",TeaService.class);
        System.out.println("---------------------teaService初始化后----method执行前-------------------------");
        teaService.method();

        System.out.println("-------------------close前------------------------------------");


        //调用close方法
        //context.close();

        // 实际开发中，我们不需要使用，因为我们开发的web应用，是运行在Tomcat这种服务器上的，关闭容器也是跟着Tomcat来进行的。
    }
}

        /*
            1、加载资源，解析配置(applicationContext.xml)
            2、根据配置生成某个或某些类的Bean实例   ----init初始化
            3、把Bean实例放到IOC容器中
            4、根据id、name、Type获取bean
            5、执行各种的操作
            6、销毁，程序运行结束    ----销毁bean
         */